<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>CANopenNode: Change Log</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">CANopenNode
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('md_doc_CHANGELOG.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="PageDoc"><div class="header">
  <div class="headertitle">
<div class="title">Change Log </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a href="https://github.com/CANopenNode/CANopenNode">Unreleased master</a> </h1>
<ul>
<li><a href="https://github.com/CANopenNode/CANopenNode/compare/v1.3...master">Full ChangeLog</a></li>
<li>See {TODO diff} for example of change in user application interface. <h2>Removed</h2>
</li>
</ul>
<ul>
<li>All drivers removed from this project, except Neuberger-socketCAN for Linux. <h2>Changed</h2>
</li>
</ul>
<ul>
<li>Directory structure rearranged. Before was all CANopen object files in <code>stack</code> directory, now they are in separate directories according to standard (<code>301</code>, <code>305</code>, <code>extra</code>, <code>socketCAN</code> for Linux driver). Include directives for that files now contain directory path. <code>CO_SDO</code> renamed to <code>CO_SDOserver</code> and <code>CO_SDOmaster</code> renamed to <code>CO_SDOclient</code>. Change of the project files will be necessary.</li>
<li>Driver interface clarified. Before was pair of <a class="el" href="CO__driver_8h.html" title="Interface between CAN hardware and CANopenNode.">CO_driver.h</a>/.c files for each microcontroller, now there is common <a class="el" href="CO__driver_8h.html" title="Interface between CAN hardware and CANopenNode.">CO_driver.h</a> file. Drivers for other microcontrollers will be separate projects. Each driver must have own <a class="el" href="CO__driver__target_8h.html" title="Linux socketCAN specific definitions for CANopenNode.">CO_driver_target.h</a> file and function definitions from C_driver.h file. See documentation in <a class="el" href="CO__driver_8h.html" title="Interface between CAN hardware and CANopenNode.">CO_driver.h</a>, example/CO_driver_target.h and example/CO_driver.c. There was no other major changes in driver interface.</li>
<li>Time base is now microsecond in all functions.</li>
<li><a class="el" href="CANopen_8h.html" title="Main CANopenNode file.">CANopen.h</a>/.c files simplified and changed. <code>CO_USE_GLOBALS</code> and <code>CO_init()</code> removed. Interface to those functions changed.</li>
<li><code><a class="el" href="group__CO__NMT__Heartbeat.html#ga9d557708be1bfb9b169718abea90b663" title="Send NMT master command.">CO_NMT_sendCommand()</a></code> master function renamed and moved from CANopen.c into CO_NMT_Heartbeat.c.</li>
<li>Heartbeat consumer <code><a class="el" href="group__CO__HBconsumer.html#ga29e01b5fe6392ce688e8ac57d966258f" title="Process Heartbeat consumer object.">CO_HBconsumer_process()</a></code> optimized.</li>
<li>Rename in <a class="el" href="CO__driver__target_8h.html" title="Linux socketCAN specific definitions for CANopenNode.">CO_driver_target.h</a>: <code>IS_CANrxNew</code> -&gt; <code>CO_FLAG_READ</code>, <code>SET_CANrxNew</code> -&gt; <code>CO_FLAG_SET</code>, <code>CLEAR_CANrxNew</code> -&gt; <code>CO_FLAG_CLEAR</code></li>
<li><a class="el" href="CO__driver_8h.html" title="Interface between CAN hardware and CANopenNode.">CO_driver.h</a> file, function <code><a class="el" href="group__CO__driver.html#ga25ee22cd2e3a2f3bb49990e8bc3076b0" title="Configure CAN message receive buffer.">CO_CANrxBufferInit()</a></code>, last argument (callback) changed from <code>(*pFunct)(void *object, const CO_CANrxMsg_t *message)</code> to <code>void (*CANrx_callback)(void *object, void *message)</code>. New functions are defined in <code><a class="el" href="CO__driver__target_8h.html" title="Linux socketCAN specific definitions for CANopenNode.">CO_driver_target.h</a></code> file: <code><a class="el" href="group__CO__CAN__Message__reception.html#ga018e9159b92165b2506a6673113cdc0e" title="CANrx_callback() can read CAN identifier from received CAN message.">CO_CANrxMsg_readIdent()</a></code>, <code><a class="el" href="group__CO__CAN__Message__reception.html#gacec1dcf8b7e66ea2e65905f91321b299" title="CANrx_callback() can read Data Length Code from received CAN message.">CO_CANrxMsg_readDLC()</a></code> and <code><a class="el" href="group__CO__CAN__Message__reception.html#gab02a5fe910acf9aa5021f97e523697f9" title="CANrx_callback() can read pointer to data from received CAN message.">CO_CANrxMsg_readData()</a></code>.</li>
<li>It is necessary to manually update CO_OD.c file - it must include: <code><a class="el" href="CO__driver_8h.html" title="Interface between CAN hardware and CANopenNode.">301/CO_driver.h</a></code>, <code>CO_OD.h</code> and <code><a class="el" href="CO__SDOserver_8h.html" title="CANopen Service Data Object - server protocol.">301/CO_SDOserver.h</a></code>.</li>
<li>Added <code>void *object</code> argument to CO_*_initCallback() functions. API clarified.</li>
<li>Add emergency receive callback also for own emergency messages.</li>
<li>Heartbeat is send immediately after NMT state changes.</li>
<li>SDO client is rewritten. Now includes read/write fifo interface to transfer data.</li>
<li>LED indicator indication (CiA303-3) moved from NMT into own files. Now fully comply to standard.</li>
<li>LSS slave is integrated into CANopenNode more directly.</li>
<li>CO_driver interface: remove Emergency object dependency for reporting CAN errors, use CANerrorStatus own variable instead. Emergency object updated. <h2>Changed SocketCAN</h2>
</li>
</ul>
<ul>
<li>./stack/socketCAN removed from the project, ./stack/Neuberger-socketCAN moved to ./socketCAN</li>
<li>driver API updated</li>
<li><a class="el" href="CO__Linux__threads_8h.html" title="Helper functions for implementing CANopen threads in Linux.">CO_Linux_threads.h</a>, function <code>void CANrx_threadTmr_init(uint16_t interval_in_milliseconds (changed to) uint32_t interval_in_microseconds)</code></li>
<li><a class="el" href="group__CO__driver.html#ga25ee22cd2e3a2f3bb49990e8bc3076b0" title="Configure CAN message receive buffer.">CO_CANrxBufferInit()</a>: remove check COB ID already used.</li>
<li>change macros CO_DRIVER_MULTI_INTERFACE and CO_DRIVER_ERROR_REPORTING. To enable(disable), set to 1(0). <h2>Fixed</h2>
</li>
</ul>
<ul>
<li>Bugfix in <code><a class="el" href="group__CO__HBconsumer.html#ga29e01b5fe6392ce688e8ac57d966258f" title="Process Heartbeat consumer object.">CO_HBconsumer_process()</a></code>: argument <code>timeDifference_us</code> was set to 0 inside for loop, fixed now.</li>
<li>BUG in CO_HBconsumer.c #168 <h2>Added</h2>
</li>
</ul>
<ul>
<li>Documentation added to <code>doc</code> directory: CHANGELOG.md, deviceSupport.md, gettingStarted.md, LSSusage.md and traceUsage.md.</li>
<li>All CANopen objects calculates next timer info for OS. Useful for energy saving.</li>
<li>Added file <a class="el" href="CO__config_8h.html" title="Configuration macros for CANopenNode.">CO_config.h</a> for stack configuration. Can be overridden by target specific or by custom definitions.</li>
<li><a class="el" href="CO__fifo_8h.html" title="FIFO circular buffer.">CO_fifo.h</a>/c for fifo data buffer, used with rewritten SDO client, etc.</li>
<li>CANopen gateway-ascii command interface according to CiA309-3 as a microcontroller independent module. It includes NMT master, LSS master and SDO client interface. Interface is non-blocking, it is added to mainline. Example for Linux stdio and socket is included.</li>
</ul>
<h1><a href="https://github.com/CANopenNode/CANopenNode/tree/v1.3">v1.3</a> - 2020-04-27 </h1>
<ul>
<li><a href="https://github.com/CANopenNode/CANopenNode/compare/v1.2...v1.3">Full ChangeLog</a> <h2>Changed</h2>
</li>
</ul>
<ul>
<li>License changed to Apache 2.0.</li>
<li>NMT self start functionality (OD object 1F80) implemented to strictly follow standard. Default value for object 1F80 have to be updated in OD editor. See README.md. <h2>Fixed</h2>
</li>
</ul>
<ul>
<li>Various fixes.</li>
<li>neuberger-socketCAN fixed. <h2>Added</h2>
</li>
</ul>
<ul>
<li>CANopen TIME protocol added.</li>
</ul>
<h1><a href="https://github.com/CANopenNode/CANopenNode/tree/v1.2">v1.2</a> - 2019-10-08 </h1>
<ul>
<li><a href="https://github.com/CANopenNode/CANopenNode/compare/v1.1...v1.2">Full ChangeLog</a> <h2>Fixed</h2>
</li>
</ul>
<ul>
<li>Memory barrier implemented for setting/clearing flags for CAN received message.</li>
<li>CO_Emergency and CO_HBconsumer files revised. <h2>Added</h2>
</li>
</ul>
<ul>
<li>CANopen LSS master/slave protocol added for configuration of bitrate and node ID.</li>
<li>Neuberger-socketCAN driver added.</li>
<li>Emergency consumer added.</li>
<li>Callbacks added to Emergency and Heartbeat consumer.</li>
</ul>
<h1><a href="https://github.com/CANopenNode/CANopenNode/tree/v1.1">v1.1</a> - 2019-10-08 </h1>
<ul>
<li><a href="https://github.com/CANopenNode/CANopenNode/compare/v1.0...v1.1">Full ChangeLog</a></li>
<li>Bugfixes. Some non-critical warnings in stack, some formatting warnings in tracing stuff.</li>
</ul>
<h1><a href="https://github.com/CANopenNode/CANopenNode/tree/v1.0">v1.0</a> - 2017-08-01 </h1>
<ul>
<li><a href="https://github.com/CANopenNode/CANopenNode/compare/v0.5...v1.0">Full ChangeLog</a></li>
<li>Stable.</li>
</ul>
<h1><a href="https://github.com/CANopenNode/CANopenNode/tree/v0.5">v0.5</a> - 2015-10-20 </h1>
<ul>
<li>Git repository started on GitHub.</li>
</ul>
<h1><a href="https://sourceforge.net/p/canopennode/code_complete/ci/master/tree/">v0.4</a> - 2012-02-26 </h1>
<ul>
<li>Git repository started on Sourceforge git.</li>
</ul>
<h1><a href="https://sourceforge.net/projects/canopennode/files/canopennode/CANopenNode-0.80/">v0.1</a> - 2004-06-29 </h1>
<ul>
<li>First edition of CANopenNode on SourceForge, files section. (V0.80 on SourceForge).</li>
</ul>
<hr  />
<p>Changelog written according to recommendations from <a href="https://keepachangelog.com/">https://keepachangelog.com/</a> </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Sat Sep 19 2020 10:03:20 for CANopenNode by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
  </ul>
</div>
</body>
</html>
